package com.cqyanyu.yanyu.db;


import com.cqyanyu.yanyu.utils.XFileUtil;

import org.xutils.DbManager;
import org.xutils.db.sqlite.WhereBuilder;
import org.xutils.ex.DbException;
import org.xutils.x;

import java.io.File;
import java.util.List;

/**
 * 项目名称：Xinyun
 * 类描述：网络API缓存数据库
 * 创建人：cheng
 * 创建时间：2016/1/12 14:30
 * 修改人：cheng
 * 修改时间：2016/1/12 14:30
 * 修改备注：
 */
public class XDB {
    static DbManager db;

    /**
     * 默认初始化
     */
    private static void initDB() {
        if (db == null) {
            DbManager.DaoConfig daoConfig = new DbManager.DaoConfig()
                    .setDbName("cache.db")
                    .setDbDir(new File(XFileUtil.getDbDir(x.app())))
                    .setDbVersion(4);
            db = x.getDb(daoConfig);
        }

    }

    public static void initDB(DbManager.DaoConfig daoConfig) {
        db = x.getDb(daoConfig);
    }

    public static DbManager getDb() {
        initDB();
        return db;
    }

    public static <T> List<T> findAll(Class<T> entityType) {
        initDB();
        try {
            return db.findAll(entityType);
        } catch (DbException e) {
            e.printStackTrace();
            return null;
        }
    }

    public static <T> T findFirst(Class<T> entityType) {
        initDB();
        try {
            return db.findFirst(entityType);
        } catch (DbException e) {
            e.printStackTrace();
            return null;
        }
    }
    public static boolean save(Object object) {
        initDB();
        try {
            db.saveOrUpdate(object);
            return true;
        } catch (DbException e) {
            e.printStackTrace();
            return false;
        }
    }

    public static boolean updata(Object object, String... updateColumnNames) {
        initDB();
        try {
            db.update(object, updateColumnNames);
            return true;
        } catch (DbException e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     * 删除表
     * @param classz
     */
    public static void dropTable(Class classz) {
        if (classz == null) return;
        initDB();
        try {
            db.dropTable(classz);
        } catch (DbException e) {
            e.printStackTrace();
        }
    }

    /**
     * 删除数据
     *
     * @param classz
     */
    public static void delete(Class classz, WhereBuilder whereBuilder) {
        if (classz == null) return;
        initDB();
        try {
            db.delete(classz, whereBuilder);
        } catch (DbException e) {
            e.printStackTrace();
        }
    }
}
